package chapter_15_template.classic;

/**
 * Created by CharloYao on 2017/9/29.
 * 模板类；模板模式核心
 */
public abstract class AbstractTemplate {

    //1.模板方法；final类型，不允许被子类修改；
    //模板模式的关键，定义了算法的骨架
    public final void operate(){
        act1();
        if (isReady()){
            act2();
        }
        act3();
    }

    //2.普通方法，让子类来实现
    protected abstract void act1();
    protected abstract void act2();
    protected abstract void act3();

    //3.钩子方法。子类覆盖后，可以改变父类的执行结果
    public boolean isReady(){
        return true;
    }

}
